package com.example.data.mapper;

import com.example.data.entity.kg.KgEntity;
import org.apache.ibatis.annotations.*;
import java.util.List;

/**
 * 知识图谱实体Mapper（操作kg_entity表）
 * 负责实体的增删改查，支持批量操作和按条件查询
 */
@Mapper
public interface KgEntityMapper {

    /**
     * 插入实体（存在则忽略，避免重复）
     * 使用INSERT IGNORE确保同名同类型实体不重复插入
     */
    void insert(KgEntity entity);
    List<KgEntity> selectAll();
    void batchInsert(@Param("list") List<KgEntity> entities);
    /**
     * 根据实体名称和类型查询（唯一确定一个实体）
     * 用于关联实体与关系时获取实体ID
     */
    KgEntity selectByNameAndType(@Param("entityName") String entityName, @Param("entityType") String entityType);
    /**
     * 根据类型查询实体（如查询所有"人物"类型实体）
     */
    List<KgEntity> selectByType(@Param("type") String type, @Param("limit") int limit, @Param("offset") int offset);
    /**
     * 模糊查询实体（支持按名称关键词搜索）
     * 用于问答助手的实体联想功能
     */
    List<KgEntity> fuzzySearch(@Param("keyword") String keyword, @Param("limit") int limit);

    /**
     * 根据ID查询实体（新增，用于关系转换）
     */
    KgEntity selectById(@Param("id") Long id);

    /**
     * 按名称或别名模糊查询（优化版）
     */
    List<KgEntity> fuzzySelectByName(@Param("name") String name);




}
